home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / yacas_alg / yacas_morphos / share / yacas / patterns.rep / code.ys < prev   
Encoding:
Text File  |  2002-03-13  |  1.4 KB  |  59 lines

  1.  
  2.  
  3. RuleBase("MakeVector",{vec,dimension});
  4. Rule("MakeVector",2,1,True)
  5. [
  6.     Local(res,i);
  7.     res:={};
  8.     i:=1;
  9.     Set(dimension,MathAdd(dimension,1));
  10.     While(LessThan(i,dimension))
  11.     [
  12.       DestructiveInsert(res,1,Atom(ConcatStrings(String(vec),String(i))));
  13.       Set(i,MathAdd(i,1));
  14.     ];
  15.     DestructiveReverse(res);
  16. ];
  17.  
  18.  
  19. RuleBase("<--",{patternleft,patternright});
  20.  
  21. Rule("<--",2,1,Type(patternleft) = "#")
  22. [
  23.   DefinePattern(patternleft[2],patternright,patternleft[1],True);
  24. ];
  25. Rule("<--",2,2,IsFunction(patternleft))
  26. [
  27.  DefinePattern(patternleft,patternright,0,True);
  28. ];
  29. HoldArg("<--",patternleft);
  30. HoldArg("<--",patternright);
  31.  
  32. RuleBase("DefinePattern",
  33.          {patternleft,patternright,patternprecedence,postpredicate});
  34. Rule("DefinePattern",4,9,Type(patternleft) = "_")
  35. [
  36.  DefinePattern(patternleft[1],patternright,
  37.                patternprecedence,patternleft[2]);
  38. ];
  39.  
  40. Rule("DefinePattern",4,10,True)
  41. [
  42.   Local(patternflat,patternvars, patt, patternoper);
  43.   patternflat := Listify(patternleft);
  44.   patternvars := Tail(patternflat);
  45.   patternoper:=String(Head(patternflat));
  46.  
  47.   If(Not(RuleBaseDefined(patternoper,Length(patternvars))),
  48.      [
  49.       MacroRuleBase(patternoper,MakeVector(arg,Length(patternvars)));
  50.      ]
  51.     );
  52.   patt:=PatternCreate(patternvars,postpredicate);
  53.   MacroRulePattern(patternoper,Length(patternvars),patternprecedence,
  54.             patt)patternright;
  55.   True;
  56. ];
  57.  
  58.  
  59.